package main

import "fmt"

type I interface {
	GetName() string
}

type O struct {
	Name string
}

func (o O) GetName() string {
	return o.Name
}

func (o *O) setName(name string) {
	o.Name = name
}

func main() {
	o := O{
		Name: "狗狗",
	}

	fmt.Println(o.GetName()) //狗狗

	/**
	当实例赋值给接口类型时，是复制一个副本，而不是指向相同的引用，所以下面修改成猫猫，没有对接口变量i发生改变
	*/
	var i I = o
	o.setName("猫猫")
	fmt.Println(o.GetName()) //猫猫
	fmt.Println(i.GetName()) //狗狗

}
